package cn.lycode.generator.service;

import cn.lycode.common.core.page.PageResult;
import cn.lycode.generator.domian.dto.DbTableListDTO;
import cn.lycode.generator.domian.dto.GeneTableDTO;
import cn.lycode.generator.domian.dto.ImportTableDTO;
import cn.lycode.generator.domian.dto.SelectTablesDTO;
import cn.lycode.generator.domian.entity.GeneratorTable;
import cn.lycode.generator.domian.vo.GenCheckedInfoVO;
import cn.lycode.generator.domian.vo.GeneratorDetailVO;
import cn.lycode.generator.domian.vo.GeneratorPreviewVO;

import java.io.IOException;
import java.util.List;

/**
 * <p>
 * 代码生成业务表 服务类
 * </p>
 *
 * @author sz
 * @since 2023-11-27
 */
public interface GeneratorTableService {

    /**
     * 查询未导入的表
     *
     * @param dto
     * @return
     */
    PageResult<GeneratorTable> selectDbTableNotInImport(DbTableListDTO dto);

    /**
     * 导入表格
     *
     * @param dto
     */
    void importTable(ImportTableDTO dto);

    void sync(ImportTableDTO dto);
    /**
     * 查询已经导入的表
     *
     * @param dto
     * @return
     */
    PageResult<GeneratorTable> selectDbTableByImport(DbTableListDTO dto);


    void delete(SelectTablesDTO dto);


    /**
     * 代码生成配置详情
     */
    GeneratorDetailVO detail(String tableName);

    /**
     * 更新代码生成配置
     * @param generatorDetailVO
     */
    void updateGeneratorSetting(GeneratorDetailVO generatorDetailVO);

    /**
     * 生成代码
     */
    List<String> generator(GeneTableDTO tableName) throws IOException;

    GenCheckedInfoVO checkDist(String tableName);

    byte[] downloadZip(SelectTablesDTO dto) throws IOException;

    List<GeneratorPreviewVO> preview(String tableName) throws IOException;


}
